import Vue from 'vue'
import VueRouter from 'vue-router'

//使用插件
Vue.use(VueRouter)
//模块化引入routes配置
import Routes from './routes'
import store from '@/store'
//先把VueRouter原型对象的push，先保存一份
let orginPush=VueRouter.prototype.push;

//重写push|replace
//第一个参数：告诉原来puhs方法，你往哪里跳转(传递那些参数)
//call||apply区别
//相同点，都可以调用函数一次，都可以篡改函数的上下文一次
//不同点：call与apply传递参数:call传递参数用逗号隔开，apply方法执行，传递数组

VueRouter.prototype.push=function(location,resolve,reject){
  if(resolve&&reject){
    orginPush.call(this,location,resolve,reject);
  }else{
    orginPush.call(this,location,()=>{},()=>{});
  }
}



 let router=new VueRouter({
   routes:Routes,
   //滚动行为
   scrollBehavior(to,form,savedPosition){
    return {y:0}
   }
})
export default router

router.beforeEach(async (to,from,next)=>{
  let token = store.state.user.token
  let name=store.state.user.userList.name
  //用户已经登录
  if(token){

    //阻止登录用户去login
    if(to.path=='/login')
     {
      next('/')
     }
     //去非login的页面，
    else
    { //先判断其用户名是否存在(解决vuex不能持久化的处理)
      if(name)
       {
        next()
      }
      //如用户名不存在，重新获取信息
      else{
         try {
          await store.dispatch('getUserInfo')
          next()
         } 
         //如无法得到用户信息
         catch (error) {
          //清除本地token
          await store.dispatch('LogOutLogin')
           router.push('/login')
         }
        }
    }
  }
  //用户未登录，游客身份
  else
  {
    if(to.path.indexOf('/pay')!=-1||to.path.indexOf('/paysuccess')!=-1||to.path.indexOf('/trade')!=-1||to.path.includes('/center')){
      let path=to.path
      console.log(path)
      
      if(!token){
         //把未登录的时候想去而去不了的信息，存储于地坛栏中
         if(to.path.indexOf('/pay')!=-1||to.path.indexOf('/paysuccess')!=-1||to.path.indexOf('/trade')!=-1){
          next(false)
         }
        else
        {
          router.push('/login?redirect='+path)
        }
      }
     
      
    }else{
      next()
    }
  }

  
})

